package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set集合是Collection集合子接口
 * Set集合接口：无序、无下标、元素不可重复【唯一性】
 * Set集合方法与Collection集合方法【使用一致】
 * add() remove() contains() size() clear()
 * 使用Iterator迭代器遍历
 * Set集合是一个接口，无法创建对象，需要使用实现类：
 * HashSet：由哈希算法实现，不保证元素顺序，不允许元素重复，可以存null
 * LinkedHashSet：【方法与HashSet一致】，由哈希算法实现，保持元素顺序，不允许元素重复，可以存null
 * TreeSet【算法：红黑树】：不可以存null，按照元素自然顺序或者指定比较器进行元素存储，不允许元素重复
 */
public class SetAPI {
    @Test
    public void testSet(){
        Set<String> set=new HashSet<>();
        set.add("蒸鹿尾儿");set.add("蒸羊羔");set.add("烧花鸭");set.add("烧子鹅");
        set.add("烧花鸭");set.add(null);
        System.out.println("Set集合："+set);
        boolean b=set.contains("烧花鸭");
        System.out.println("判断Set集合是否存在【烧花鸭】元素"+b);
        System.out.println("判断set集合长度"+set.size());
        //Iterator遍历 set 集合 元素
        //1.通过set集合调取 iterator() 方法  获取迭代器实例Iterator
        Iterator<String> it = set.iterator();
        //2.Iterator     遵循：问、取、删     删烧子鹅
        while(it.hasNext()){//问：集合中是否有烧子鹅元素--有：true
            String str=(String)it.next();//取：set集合元素
            // null 引用类型默认值  不是字符串 要删null的话这样删
            //if(str==null){
            //     it.remove();}
            //判断明确的值  必须用 ==
            //判断对象  使用  "字符串".equals(str)  实值
            //                obj.equals(add)  地址值
            if("烧子鹅".equals(str)) {//如果“烧子鹅”等于“烧子鹅”元素
                it.remove();//删
            }
        }
        System.out.println("迭代器实现删除后的set集合:"+set);
    }
}
